์ ํํ๊ณ ์ง๊ด์ ์ธ ๋ชฐ์ ํ ์ฑ ๊ตฌ์ถ์ ํ์์ ์ธ ์๋, ๋ก์ปฌ, ์ฐธ์กฐ ๊ณต๊ฐ์ ํฌํจํ WebXR ์ขํ๊ณ์ ๋ํ ์ฌ์ธต ๋ถ์.
WebXR ๊ณต๊ฐ ํ์: ๋ชฐ์ ํ ๊ฒฝํ์ ์ํ ์ขํ๊ณ ๊ด๋ฆฌ ๋ง์คํฐํ๊ธฐ
WebXR์ ๋์งํธ ์ธ๊ณ์ ๋ฌผ๋ฆฌ์ ์ธ๊ณ ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ ํ๋ฌผ๋ฉฐ ๋ชฐ์ ํ ๊ฒฝํ์ ์ฐฝ์กฐํ ์ ์๋ ๋ฌธ์ ์ด์ด์ค๋๋ค. ์ด ๊ธฐ์ ์ ํต์ฌ์๋ ์ขํ๊ณ๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ์ด๋ฌํ ์์คํ ์ ์ดํดํ๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ํํ๊ณ ์ง๊ด์ ์ด๋ฉฐ ๋งค๋ ฅ์ ์ธ WebXR ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
WebXR์์ ์ขํ๊ณ๊ฐ ์ค์ํ ์ด์
๊ฐ์ ๋ฐ๋ฌผ๊ด์ ์ง๋๋ค๊ณ ์์ํด ๋ณด์ธ์. ์ฌ์ฉ์๊ฐ ๊ฐ์ ๊ณต๊ฐ ๋ด์ ์ ํํ๊ฒ ๋ฐฐ์น๋ ์ ์๋ฌผ์ ํ์ํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ๋๋ ๋์งํธ ์ฝํ ์ธ ๋ฅผ ํ์ค ์ธ๊ณ์ ๋ง์์ฐ๋ ์ฆ๊ฐ ํ์ค ์ฑ์ ๊ฐ๋ฐํ๊ณ ์์ ์๋ ์์ต๋๋ค. ๋ ์๋๋ฆฌ์ค ๋ชจ๋์์ ๊ฐ์ฒด์ ์์น์ ๋ฐฉํฅ์ ์ ์ํ๊ณ ์ฌ์ฉ์์ ์์ง์์ ์ถ์ ํ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ก ์ฌ๊ธฐ์ ์ขํ๊ณ๊ฐ ์ญํ ์ ํฉ๋๋ค. ์ขํ๊ณ๋ WebXR ์ฅ๋ฉด ๋ด์์ ๊ณต๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ขํ๊ณ์ ๋ํ ํ์คํ ์ดํด๊ฐ ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค:
- ์๋ชป๋ ๊ฐ์ฒด ๋ฐฐ์น: ๊ฐ์ฒด๊ฐ ์๋ชป๋ ์์น๋ ๋ฐฉํฅ์ผ๋ก ๋ํ๋ฉ๋๋ค.
- ๋ถ์์ ํ ์ถ์ : ๊ฐ์ ๊ฐ์ฒด๊ฐ ํ์ค ์ธ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค๋ฆฌ๊ฑฐ๋ ๋จ๋ฆฝ๋๋ค.
- ์ผ๊ด๋์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ: ๋ค๋ฅธ ์ฅ์น๋ ํ๊ฒฝ์์ ์ฅ๋ฉด์ด ์ธ์๋๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค.
WebXR์ ์ฃผ์ ์ขํ ๊ณต๊ฐ
WebXR์ ๊ฐ๊ฐ ํน์ ๋ชฉ์ ์ ๊ฐ์ง ์ฌ๋ฌ ์ฃผ์ ์ขํ ๊ณต๊ฐ์ ํ์ฉํฉ๋๋ค. ์ด๋ฌํ ๊ณต๊ฐ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ ํํ ๊ณต๊ฐ ์ถ์ ๋ฐ ๊ฐ์ฒด ๋ฐฐ์น์ ํ์์ ์ ๋๋ค.
1. ์๋ ๊ณต๊ฐ (๋๋ ์ ์ญ ๊ณต๊ฐ)
์๋ ๊ณต๊ฐ์ ์ ์ฒด WebXR ์ฅ๋ฉด์ ๋ง์คํฐ ์ขํ๊ณ์ ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ฒด์ ๊ณต๊ฐ์ด ์๋์ ์ผ๋ก ๋ฐฐ์น๋๋ ๊ถ๊ทน์ ์ธ ์ฐธ์กฐ ํ๋ ์์ ๋๋ค. ๊ฐ์ ๋๋ ์ฆ๊ฐ ์ธ๊ณ์ ๋ชจ๋ ๊ฒ์ ๋ํ ์ ๋์ ์ธ ๊ธฐ์ค์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์๋ ๊ณต๊ฐ์ ์ฃผ์ ํน์ง:
- ์ ์ : ์๋ ๊ณต๊ฐ ์์ฒด๋ ์์ง์ด๊ฑฐ๋ ํ์ ํ์ง ์์ต๋๋ค.
- ์์ (0, 0, 0): ์๋ ๊ณต๊ฐ์ ์์ ์ ๋ชจ๋ ์ขํ์ ์ค์ฌ ์ฐธ์กฐ์ ์ ๋๋ค.
- ๋์ ์ค์ผ์ผ: ์๋ ๊ณต๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ์ขํ ๊ณต๊ฐ๋ณด๋ค ํจ์ฌ ๋ ๋์ ์์ญ์ ํฌํจํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก: ๊ฐ์ ํ์๊ณ๋ฅผ ๋ง๋ ๋ค๊ณ ์์ํด ๋ณด์ธ์. ํ์, ํ์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ถค๋๋ ๋ชจ๋ ์๋ ๊ณต๊ฐ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ ์๋ฉ๋๋ค. ํ์์ ์์น๋ ์๋ ๊ณต๊ฐ์์ (0, 0, 0)์ผ ์ ์์ผ๋ฉฐ, ์ง๊ตฌ์ ์์น์ ํ์ ์ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์๋ฉ๋๋ค. ๊ฐ์ ํ๊ฒฝ์ ์ ์ฝ ๋ด์์ ๊ด๋ํ ๊ฑฐ๋ฆฌ์ ๊ฑธ์น ์ํ๊ณ๋ฅผ ํํํ ์ ์์ต๋๋ค.
2. ๋ก์ปฌ ๊ณต๊ฐ (๋๋ ๊ฐ์ฒด ๊ณต๊ฐ)
๋ก์ปฌ ๊ณต๊ฐ์ ๊ฐ๋ณ ๊ฐ์ฒด์ ํน์ ํ ์ขํ๊ณ์ ๋๋ค. ๊ฐ์ฒด ์์ฒด์ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ ์๋ฉ๋๋ค. ์ฅ๋ฉด์ ๊ฐ ๊ฐ์ฒด๋ ๊ณ ์ ํ ๋ก์ปฌ ๊ณต๊ฐ์ ๊ฐ์ง๋ฏ๋ก, ๋ด๋ถ ๊ตฌ์กฐ์ ๋ณํ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ก์ปฌ ๊ณต๊ฐ์ ์ฃผ์ ํน์ง:
- ๊ฐ์ฒด ์ค์ฌ: ๋ก์ปฌ ๊ณต๊ฐ์ ์์ ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์ ์ค์ฌ์ด๋ ํต์ฌ ์ง์ ์ ๋๋ค.
- ๋ ๋ฆฝ์ : ๊ฐ ๊ฐ์ฒด๋ ์์ ๋ง์ ๋ ๋ฆฝ์ ์ธ ๋ก์ปฌ ๊ณต๊ฐ์ ๊ฐ์ง๋๋ค.
- ๊ณ์ธต์ : ๋ก์ปฌ ๊ณต๊ฐ์ ์๋ก ์ค์ฒฉ๋์ด ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค(์: ๋ชธ์ ๋ถ์ ํ, ํ์ ๋ถ์ ์).
์ฌ์ฉ ์ฌ๋ก: ๊ฐ์ ์๋์ฐจ๋ฅผ ์๊ฐํด ๋ณด์ธ์. ๋ก์ปฌ ๊ณต๊ฐ์ ์์ ์ ์๋์ฐจ ์์์ ์ค์ฌ์ ์์ ์ ์์ต๋๋ค. ๋ฐํด, ์ข์, ํธ๋ค์ ๋ชจ๋ ์๋์ฐจ์ ๋ก์ปฌ ๊ณต๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์นํ๊ณ ํ์ ํฉ๋๋ค. ์๋ ๊ณต๊ฐ์์ ์๋์ฐจ๋ฅผ ์์ง์ด๋ฉด, ๋ชจ๋ ๊ตฌ์ฑ ์์๋ ์๋์ฐจ ๋ก์ปฌ ๊ณต๊ฐ ๋ณํ์ ์์(children)์ด๊ธฐ ๋๋ฌธ์ ํจ๊ป ์์ง์ ๋๋ค.
3. ์ฐธ์กฐ ๊ณต๊ฐ
์ฐธ์กฐ ๊ณต๊ฐ์ WebXR ํ๊ฒฝ ๋ด์์ ์ฌ์ฉ์์ ์์น์ ๋ฐฉํฅ์ ์ถ์ ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ๊ฐ์ ์ธ๊ณ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. WebXR์ ๋ค์ํ ์ถ์ ์๋๋ฆฌ์ค์ ๋ง์ถฐ ์ฌ๋ฌ ์ ํ์ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค.
์ฐธ์กฐ ๊ณต๊ฐ์ ์ข ๋ฅ:
- ๋ทฐ์ด ์ฐธ์กฐ ๊ณต๊ฐ(Viewer Reference Space): ์ฌ์ฉ์์ ๋จธ๋ฆฌ ์์น์ ๋ฐฉํฅ์ ๋ํ๋ ๋๋ค. ๋ณธ์ง์ ์ผ๋ก ๋ถ์์ ํ๋ฉฐ ์ฌ์ฉ์๊ฐ ๋จธ๋ฆฌ๋ฅผ ์์ง์ผ ๋๋ง๋ค ๋งค ํ๋ ์ ๋ณ๊ฒฝ๋ฉ๋๋ค. ํ๊ฒฝ์ ๊ฐ์ฒด๋ฅผ ์๊ตฌ์ ์ผ๋ก ๋ฐฐ์นํ๋ ๋ฐ๋ ์ด์์ ์ด์ง ์์ต๋๋ค.
- ๋ก์ปฌ ์ฐธ์กฐ ๊ณต๊ฐ(Local Reference Space): WebXR ์ธ์ ์ด ์์๋ ๋ ์ฌ์ฉ์์ ์ด๊ธฐ ์์น์ ๊ณ ์ ๋ ์์ ์ ์ธ ์ถ์ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์์ญ ๋ด์ ๋จธ๋ฌด๋ ๊ฒฝํ(์: ์์์ ํ๋ VR)์ ์ ํฉํฉ๋๋ค.
- ๊ฒฝ๊ณ ์ฐธ์กฐ ๊ณต๊ฐ(Bounded Reference Space): ๋ก์ปฌ ์ฐธ์กฐ ๊ณต๊ฐ๊ณผ ์ ์ฌํ์ง๋ง ์ฌ์ฉ์๊ฐ ์์ง์ผ ๊ฒ์ผ๋ก ์์๋๋ ํน์ ๊ฒฝ๊ณ(์: ์ฌ๊ฐํ ์์ญ)๋ฅผ ์ ์ํฉ๋๋ค. ๋ฃธ์ค์ผ์ผ VR ๊ฒฝํ์ ์ ์ฉํฉ๋๋ค.
- ๋น๊ฒฝ๊ณ ์ฐธ์กฐ ๊ณต๊ฐ(Unbounded Reference Space): ์ฌ์ฉ์๊ฐ ์ธ์์ ์ธ ๊ฒฝ๊ณ ์์ด ์ถ์ ๋ณผ๋ฅจ ๋ด์์ ์์ ๋กญ๊ฒ ์์ง์ผ ์ ์๋๋ก ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ ๋์ ๊ณต๊ฐ์ ๊ฑธ์ด ๋ค๋๊ฑฐ๋ ๊ฐ๊น์ด ์ฃผ๋ณ์ ๋์ด ๊ฐ์ ํ๊ฒฝ์ ํ์ํ๋ ๊ฒฝํ์ ์ด์์ ์ ๋๋ค.
- ๋ฐ๋ฅ ๋ ๋ฒจ ์ฐธ์กฐ ๊ณต๊ฐ(Floor-Level Reference Space): ์ถ์ ๊ณต๊ฐ์ ๋ฐ๋ฅ์ ๊ณ ์ ํฉ๋๋ค. ์ด๋ ์ฆ๊ฐ ํ์ค์์ ์ ์ฉํ๋ฉฐ, ์ฌ์ฉ์ ๊ธฐ๊ธฐ์ ๋์ด์ ๊ด๊ณ์์ด ๊ฐ์ฒด๊ฐ ๋ฐ๋ฅ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ฐธ์กฐ ๊ณต๊ฐ ์ ํํ๊ธฐ: ์ฐธ์กฐ ๊ณต๊ฐ์ ์ ํ์ WebXR ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ถ์ ์์ ์ฑ: ์ถ์ ์ด ์ผ๋ง๋ ์์ ์ ์ด์ด์ผ ํฉ๋๊น? ์ ๋ฐํ ๊ฐ์ฒด ๋ฐฐ์น๋ฅผ ์ํด์๋ ๋ ์์ ์ ์ธ ์ฐธ์กฐ ๊ณต๊ฐ์ด ํ์ํฉ๋๋ค.
- ์ฌ์ฉ์ ์์ง์: ์ฌ์ฉ์๊ฐ ์ผ๋ง๋ ์์ ๋กญ๊ฒ ์์ง์ผ ์ ์์ต๋๊น? ์์๋๋ ์์ง์ ๋ฒ์๋ฅผ ์์ฉํ ์ ์๋ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ ํํ์ญ์์ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ: ์์์ ํ๋ VR ๊ฒฝํ์ ๋๊น, ๋ฃธ์ค์ผ์ผ AR ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๊น, ์๋๋ฉด ๋ค๋ฅธ ๊ฒ์ ๋๊น?
์์: ์ค์ ํ ์ด๋ธ ์์ ๊ฐ์ ์ปคํผ์ปต์ ๋๋ AR ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๋ฐ๋ฅ ๋ ๋ฒจ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์๊ฐ ์์ง์ฌ๋ ์ปต์ด ํ ์ด๋ธ ์์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
์ขํ๊ณ ๋ณํ: ๊ณต๊ฐ ๊ฐ์ ๊ฐ๊ทน ๋ฉ์ฐ๊ธฐ
์ฌ๋ฌ ์ขํ๊ณ๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด ๊ฐ์ฒด๋ค์ ๊ทธ ์ฌ์ด์์ ๋ณํํ๋ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ ๊ณต๊ฐ์์ ๋ค๋ฅธ ๊ณต๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ด๋(translate)ํ๊ณ ํ์ (rotate)์ํค๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ๋ณํ์ ์ดํดํ๋ ๊ฒ์ ์ ํํ ๊ฐ์ฒด ๋ฐฐ์น ๋ฐ ์ถ์ ์ ํ์์ ์ ๋๋ค.
์ฃผ์ ๋ณํ:
- ๋ก์ปฌ์์ ์๋๋ก(Local to World): ๊ฐ์ฒด์ ๋ก์ปฌ ๊ณต๊ฐ ์ขํ๋ฅผ ์๋ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ ์ฅ๋ฉด์์ ๊ฐ์ฒด์ ์ ๋ ์์น๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋์์ ๋ก์ปฌ๋ก(World to Local): ์๋ ๊ณต๊ฐ ์ขํ๋ฅผ ๊ฐ์ฒด์ ๋ก์ปฌ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- ์ฐธ์กฐ ๊ณต๊ฐ์์ ์๋๋ก(Reference Space to World): ์ฐธ์กฐ ๊ณต๊ฐ(์: ์ฌ์ฉ์์ ์ถ์ ๋ ์์น)์ ์ขํ๋ฅผ ์๋ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
- ์๋์์ ์ฐธ์กฐ ๊ณต๊ฐ์ผ๋ก(World to Reference Space): ์๋ ๊ณต๊ฐ ์ขํ๋ฅผ ์ฐธ์กฐ ๊ณต๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ ํ์ฌ ์ฌ์ฉ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ ๋ด ๊ฐ์ฒด๊ฐ ์ด๋์ ์๋์ง ๊ฒฐ์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๋ณํ ํ๋ ฌ: ์ค์ ๋ก ์ขํ๊ณ ๋ณํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ณํ ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ํํ๋ฉ๋๋ค. ์ด๊ฒ๋ค์ ์ด๋๊ณผ ํ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ธ์ฝ๋ฉํ๋ 4x4 ํ๋ ฌ์ ๋๋ค. Three.js ๋ฐ Babylon.js์ ๊ฐ์ WebXR ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณํ ํ๋ ฌ์ ๋ง๋ค๊ณ ์ ์ฉํ๋ ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์ (๊ฐ๋ ์ ):
์๋ ๊ณต๊ฐ์ ์์น๊ฐ ์๋ ค์ง ๊ฐ์ ๊ฝ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. `viewer` ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ์ฌ ์ถ์ ๋๋ ์ฌ์ฉ์์ ์์ ์ด ๊ฝ์ ๋ถ์ด๊ณ ์ถ์ต๋๋ค. ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์๋ ๊ณต๊ฐ ์์ ์์ ๋ทฐ์ด ์ฐธ์กฐ ๊ณต๊ฐ์ผ๋ก์ ๋ณํ ํ๋ ฌ์ ๊ฐ์ ธ์ต๋๋ค.
- ๊ทธ ํ๋ ฌ์ ์ญ๋ณํํ์ฌ ๋ทฐ์ด ์ฐธ์กฐ ๊ณต๊ฐ์์ ์๋ ๊ณต๊ฐ์ผ๋ก์ ๋ณํ์ ์ป์ต๋๋ค.
- ๊ฝ์ ์๋ ๊ณต๊ฐ ์์น๋ฅผ ๋ํ๋ด๋ ๋ณํ ํ๋ ฌ์ ๊ฐ์ ธ์ต๋๋ค.
- ๋ทฐ์ด-์์-์๋๋ก ํ๋ ฌ์ ๊ฝ์ ์๋ ์์น ํ๋ ฌ์ ๊ณฑํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ทฐ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ๊ฝ์ ์์น๊ฐ ๋์ต๋๋ค.
- ๋ง์ง๋ง์ผ๋ก, ์์ ๋ก์ปฌ ์ขํ ๊ณต๊ฐ ๋ด์์ ๋ก์ปฌ ์คํ์ ์ ์ถ๊ฐํ์ฌ ์์ ๊ธฐ์ค์ผ๋ก ๊ฝ์ ์์น๋ฅผ ์กฐ์ ํฉ๋๋ค.
์ด ์๋ ๋ทฐ์ด์ ๋จธ๋ฆฌ๋ ์๊ณผ ๊ฐ์ด ๋์ ์ผ๋ก ์ถ์ ๋๋ ์ฐธ์กฐ ๊ณต๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐฐ์นํ๋ ๋ฐ ํ์ํ ๋ณํ ์ฒด์ธ์ ๋ณด์ฌ์ค๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฝ๋ ์ค๋ํซ
์ธ๊ธฐ ์๋ 3D ๊ทธ๋ํฝ์ฉ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Three.js๋ฅผ ์ฌ์ฉํ ์ฝ๋ ์์ ๋ก ์ด๋ฌํ ๊ฐ๋ ์ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ์๋ ๊ณต๊ฐ์ ๊ฐ์ฒด ๋ฐฐ์นํ๊ธฐ
์ด ์ฝ๋ ์ค๋ํซ์ ํ๋ธ๋ฅผ ๋ง๋ค์ด ์๋ ๊ณต๊ฐ์ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค:
// ํ๋ธ ์ง์ค๋ฉํธ๋ฆฌ ์์ฑ
const geometry = new THREE.BoxGeometry( 1, 1, 1 );
// ์ฌ์ง ์์ฑ
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
// ๋ฉ์(ํ๋ธ) ์์ฑ
const cube = new THREE.Mesh( geometry, material );
// ์๋ ๊ณต๊ฐ์์ ํ๋ธ์ ์์น ์ค์
cube.position.set( 2, 1, -3 ); // X, Y, Z ์ขํ
// ์ฅ๋ฉด์ ํ๋ธ ์ถ๊ฐ
scene.add( cube );
์ด ์์์ ํ๋ธ์ `position` ์์ฑ์ ์๋ ๊ณต๊ฐ์์์ ์ขํ๋ฅผ ๋ํ๋ด๋ `THREE.Vector3`์ ๋๋ค. `set()` ๋ฉ์๋๋ ์ํ๋ X, Y, Z ์ขํ๋ฅผ ํ ๋นํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์์ 2: ๋ก์ปฌ ๊ณ์ธต ๊ตฌ์กฐ ์์ฑ
์ด ์ฝ๋๋ ๋ ๊ฐ์ฒด ๊ฐ์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๋ง๋ค์ด ๋ก์ปฌ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค:
// ๋ถ๋ชจ ๊ฐ์ฒด ์์ฑ (์: ๊ตฌ)
const parentGeometry = new THREE.SphereGeometry( 1, 32, 32 );
const parentMaterial = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const parent = new THREE.Mesh( parentGeometry, parentMaterial );
scene.add( parent );
// ์์ ๊ฐ์ฒด ์์ฑ (์: ํ๋ธ)
const childGeometry = new THREE.BoxGeometry( 0.5, 0.5, 0.5 );
const childMaterial = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
const child = new THREE.Mesh( childGeometry, childMaterial );
// ๋ถ๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์์ ์์น ์ค์ (๋ถ๋ชจ์ ๋ก์ปฌ ๊ณต๊ฐ์์)
child.position.set( 1.5, 0, 0 );
// ์์์ ๋ถ๋ชจ์ ์ถ๊ฐ
parent.add( child );
// ๋ถ๋ชจ๋ฅผ ํ์ ์ํค๋ฉด ์์๋ ์ฃผ์๋ฅผ ๋ฐ๋ผ ํ์ ํจ
parent.rotation.y += 0.01;
`parent.add(child)`๋ฅผ ์ฌ์ฉํ์ฌ `child` ๊ฐ์ฒด๊ฐ `parent` ๊ฐ์ฒด์ ์์์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. ์ด์ ์์์ `position`์ ๋ถ๋ชจ์ ๋ก์ปฌ ๊ณต๊ฐ์ ๊ธฐ์ค์ผ๋ก ํด์๋ฉ๋๋ค. ๋ถ๋ชจ๋ฅผ ํ์ ์ํค๋ฉด ์์๋ ํ์ ํ๋ฉฐ ์๋์ ์ธ ์์น๋ฅผ ์ ์งํฉ๋๋ค.
์์ 3: ์ฐธ์กฐ ๊ณต๊ฐ์ผ๋ก ์ฌ์ฉ์ ์์น ์ถ์ ํ๊ธฐ
์ด ์ฝ๋๋ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ํฌ์ฆ(์์น ๋ฐ ๋ฐฉํฅ)๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค:
async function onSessionStarted( session ) {
// ๋ก์ปฌ ์ฐธ์กฐ ๊ณต๊ฐ ์์ฒญ
const referenceSpace = await session.requestReferenceSpace( 'local' );
session.requestAnimationFrame( function animate(time, frame) {
session.requestAnimationFrame( animate );
if ( frame ) {
const pose = frame.getViewerPose( referenceSpace );
if ( pose ) {
// ์ฌ์ฉ์์ ์์น ๊ฐ์ ธ์ค๊ธฐ
const position = pose.transform.position;
// ์ฌ์ฉ์์ ๋ฐฉํฅ(์ฟผํฐ๋์ธ) ๊ฐ์ ธ์ค๊ธฐ
const orientation = pose.transform.orientation;
// ์์น์ ๋ฐฉํฅ์ ์ฌ์ฉํ์ฌ ์ฅ๋ฉด์ด๋ ๊ฐ์ฒด ์
๋ฐ์ดํธ.
// ์: ์ฌ์ฉ์ ์์ ๊ฐ์ ๊ฐ์ฒด ๋ฐฐ์นํ๊ธฐ
myObject.position.copy(position).add(new THREE.Vector3(0, 0, -2));
myObject.quaternion.copy(orientation);
}
}
});
}
์ด ์ฝ๋๋ `XRFrame`์์ `ViewerPose`๋ฅผ ๊ฒ์ํ์ฌ ์ง์ ๋ `referenceSpace`๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ์์ ์์น์ ๋ฐฉํฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ `position`๊ณผ `orientation`์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์นํ๋ ๋ฑ ์ฅ๋ฉด์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
์ขํ๊ณ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ํํ๊ณ ๊ฒฌ๊ณ ํ WebXR ๊ฒฝํ์ ๋ณด์ฅํ๋ ค๋ฉด ์ขํ๊ณ ๊ด๋ฆฌ์ ๋ํ ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค:
- ์ฌ๋ฐ๋ฅธ ์ฐธ์กฐ ๊ณต๊ฐ ์ ํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ์ ์๊ตฌ ์ฌํญ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ์ ์ ํ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ ํํ์ญ์์ค. ์๋ชป๋ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ฉด ๋ถ์์ ์ฑ๊ณผ ๋ถ์ ํํ ๊ฐ์ฒด ๋ฐฐ์น๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๊ณ์ธต ๊ตฌ์กฐ ์ดํด: ๋ก์ปฌ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ณํ์ ๋จ์ํํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ณต์กํ ์ฅ๋ฉด์ ๊ด๋ฆฌํ๊ณ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์งํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ๋ณํ ํ๋ ฌ ์ฌ์ฉ: ํจ์จ์ ์ธ ์ขํ๊ณ ๋ณํ์ ์ํด ๋ณํ ํ๋ ฌ์ ํ์ฉํ์ญ์์ค. WebXR ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฌํ ํ๋ ฌ์ ๋ง๋ค๊ณ ์กฐ์ํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ๋ค์ํ ์ฅ์น์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ฌ ์ผ๊ด๋ ๋์์ ๋ณด์ฅํ์ญ์์ค. ์ขํ๊ณ ๋์์ ํ๋ซํผ๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์ถ์ ์์ค ์ฒ๋ฆฌ: ์ถ์ ์์ค์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ญ์์ค. ์ถ์ ์ด ์์ค๋๋ฉด ์ฅ๋ฉด์ ์ ์ง์ํค๊ฑฐ๋ ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ์ ํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ๋ก์ปฌ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฐธ์กฐ ๊ณต๊ฐ์ ์์ฒญํ๊ณ ์ฌ์ฉ์๋ฅผ ๋ถ๋๋ฝ๊ฒ ์ ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ฌ์ฉ์์ ํธ์ํจ ๊ณ ๋ ค: ์ฌ์ฉ์์ ์์ ์ ๊ธ๊ฒฉํ๊ฑฐ๋ ์๊ธฐ์น ์์ ๋ณํ๋ฅผ ํผํ์ญ์์ค. ์ขํ๊ณ์ ๊ฐ์์ค๋ฌ์ด ๋ณํ๋ ๋ฐฉํฅ ๊ฐ๊ฐ ์์ค๊ณผ ๋ฉ์ค๊บผ์์ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ์ค์ผ์ผ์ ์ฃผ์: ๊ฐ์ฒด์ ์ ์ฒด ์ฅ๋ฉด์ ์ค์ผ์ผ์ ๊ณ์ ์ถ์ ํ์ญ์์ค. ์ค์ผ์ผ๋ง ๋ฌธ์ ๋ ์๊ฐ์ ๊ฒฐํจ๊ณผ ๋ถ์ ํํ ๊ณต๊ฐ ์ธ์์ ์ด๋ํ ์ ์์ต๋๋ค. AR์์๋ ์ค์ ์ธ๊ณ์ ์ค์ผ์ผ์ ์ ํํ๊ฒ ํํํ๋ ๊ฒ์ด ์ ๋ขฐ์ฑ์ ์ํด ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
- ๋๋ฒ๊น ๋๊ตฌ ์ฌ์ฉ: WebXR ๋๋ฒ๊น ๋๊ตฌ(์: WebXR Device API ์๋ฎฌ๋ ์ดํฐ)๋ฅผ ํ์ฉํ์ฌ ์ขํ๊ณ๋ฅผ ์๊ฐํํ๊ณ ๋ณํ์ ์ถ์ ํ์ญ์์ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ขํ๊ณ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ณ ๊ธ ์ฃผ์
๋ค์ค ์ฐธ์กฐ ๊ณต๊ฐ
์ผ๋ถ WebXR ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์ฐธ์กฐ ๊ณต๊ฐ์ ๋์์ ์ฌ์ฉํ์ฌ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ฐ์ ์ธ ์ถ์ ์๋ ๋ก์ปฌ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ณ ๋ฐ๋ฅ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์นํ๋ ๋ฐ๋ ๋ฐ๋ฅ ๋ ๋ฒจ ์ฐธ์กฐ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ฐธ์กฐ ๊ณต๊ฐ์ ๊ด๋ฆฌํ๋ ค๋ฉด ์ ์คํ ์กฐ์ ๋ฐ ๋ณํ ๋ก์ง์ด ํ์ํฉ๋๋ค.
์ต์ปค (Anchors)
WebXR ์ต์ปค๋ ๊ฐ์ ๊ฐ์ฒด์ ์ค์ ์ธ๊ณ ๊ฐ์ฒด ๊ฐ์ ์๊ตฌ์ ์ธ ๊ณต๊ฐ ๊ด๊ณ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ต์ปค๋ ์ฌ์ฉ์๊ฐ ์์ง์ฌ๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์ค์ ์ธ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ ์ ๋ ์์น์ ์๋๋ก ๋ณด์ฅํ๋ ค๋ AR ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ์ ์ฉํฉ๋๋ค. ์ต์ปค๋ ์ฌ์ฉ์ ํ๊ฒฝ์ ํน์ ์์น์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์๊ตฌ์ ์ผ๋ก "๊ณ ์ "ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค.
์์: ์ค์ ํ ์ด๋ธ์ ์ต์ปค๋ฅผ ๋ฐฐ์นํ๊ณ ํด๋น ์ต์ปค์ ๊ฐ์ ๋จํ๋ฅผ ๋ถ์ฐฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์์ ์์ง์์ ๊ด๊ณ์์ด ๋จํ๋ ํ ์ด๋ธ ์์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
ํํธ ํ ์คํ (Hit Testing)
ํํธ ํ ์คํ ์ ์ฌ์ฉํ๋ฉด ๊ด์ (3D ๊ณต๊ฐ์ ์ )์ด ์ค์ ํ๋ฉด๊ณผ ๊ต์ฐจํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฅ์น ์ผ์์ ์ํด ๊ฐ์ง๋ ํ๋ฉด์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํด AR ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค. ํํธ ํ ์คํ ์ ์ฌ์ฉ์๊ฐ ์ค์ ์ธ๊ณ์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ ์ ์๋ ๋ํํ AR ๊ฒฝํ์ ๋ง๋๋ ๋ฐ ํ์์ ์ ๋๋ค.
์์: ํํธ ํ ์คํ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ค์ ๋ฐ๋ฅ์ ํญํ์ฌ ํด๋น ์์น์ ๊ฐ์ ์บ๋ฆญํฐ๋ฅผ ๋ฐฐ์นํ๋๋ก ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ขํ๊ณ ๊ด๋ฆฌ๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ๋งค๋ ฅ์ ์ด๊ณ ์ ํํ WebXR ๊ฒฝํ์ ๊ตฌ์ถํ๋ ๋ฐ ๊ธฐ๋ณธ์ ๋๋ค. ๋ค์ํ ์ ํ์ ์ขํ ๊ณต๊ฐ์ ์ดํดํ๊ณ , ๋ณํ์ ๋ง์คํฐํ๊ณ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฐ์ ์ธ๊ณ์ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ์๋ฒฝํ๊ฒ ํผํฉํ๋ ๋ชฐ์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
WebXR ๊ธฐ์ ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ด ๋ฑ์ฅํ ๊ฒ์ ๋๋ค. ์ต์ ๊ฐ๋ฐ ๋ํฅ์ ํ์ ํ๊ณ ๋ค์ํ ๊ธฐ์ ์ ์คํํจ์ผ๋ก์จ ๋ชฐ์ ํ ๊ฒฝํ์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๊ณ ์ง์ ์ผ๋ก ํ์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ ๊ฒ์ ๋๋ค.
WebXR์ ๊ต์ก ๋ฐ ํ๋ จ์์๋ถํฐ ์๋ฃ ๋ฐ ์ํฐํ ์ธ๋จผํธ์ ์ด๋ฅด๊ธฐ๊น์ง ์ ์ธ๊ณ ๋ค์ํ ์ฐ์ ์์ ๋น ๋ฅด๊ฒ ์ถ์ง๋ ฅ์ ์ป๊ณ ์์ต๋๋ค. ์ขํ๊ณ๋ฅผ ์ ์ดํดํ๋ ๊ฒ์ ๋ฏธ๋ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ค์ํ ๊ฒ์ ๋๋ค. ๊ตญ์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฐ์ ๊ด๊ด (์ ์ธ๊ณ): ์ฌ์ฉ์๊ฐ ์ ํํ ์ถ์ฒ๊ณผ ์์น๋ก ์ ์ธ๊ณ์ ๋๋๋งํฌ๋ฅผ ๊ฐ์์ผ๋ก ํ์ํ ์ ์๋๋ก ํฉ๋๋ค.
- ์๊ฒฉ ํ์ (๊ตญ์ ํ): ๋ฌผ๋ฆฌ์ ์์น์ ๊ด๊ณ์์ด ํ์ด ๊ณต์ ๋ ๊ฐ์ ๊ณต๊ฐ์์ 3D ๋ชจ๋ธ์ ๋ํด ํ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
- AR ๊ฐํ ๊ต์ก (๋ค๊ตญ์ด): ๋ํํ 3D ๋ชจ๋ธ์ ๊ต๊ณผ์์ ๊ฒน์ณ์ ์ฌ๋ฌ ์ธ์ด๋ก ์ ๊ทผํ ์ ์๋ ๋ชฐ์ ํ ํ์ต ๊ฒฝํ์ ๋ง๋ญ๋๋ค.
- ์๋ฃ ํ๋ จ (์ ์ธ๊ณ): ์ ๋ฐํ ํด๋ถํ์ ๋ชจ๋ธ ๋ด์์ ํ์ค์ ์ธ ์๋ฎฌ๋ ์ด์ ์ ์ฌ์ฉํ์ฌ ์์ฌ์ ๊ฐํธ์ฌ์๊ฒ ์์ ์ ์ฐจ๋ฅผ ํ๋ จ์ํต๋๋ค.
๊ฐ๋ฅ์ฑ์ ๋ฌด๊ถ๋ฌด์งํฉ๋๋ค. ๊ฒฌ๊ณ ํ ๊ณต๊ฐ์ ์ดํด์ ์ง์คํ๊ณ ์ง์์ ์ธ ํ์ต์ ์์ฉํจ์ผ๋ก์จ ํฅ๋ฏธ๋ก์ด WebXR ๊ฐ๋ฐ์ ํ๊ฒฝ์ ์ฑ๊ณต์ ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค.